草庐IT

Java Swingworker 和多线程

全部标签

c++ - 在 C++ 中使用线程报告计算进度

我正在编写一个通用抽象类,以便能够根据需要报告尽可能多的实例变量的状态。例如,考虑以下无用循环:inta,b;for(inti=0;i如果能够在不修改循环的情况下查看a和b的值,那就太好了。过去我写过如下if语句:inta,b;for(inti=0;i这将允许我每100次迭代查看a的值。然而,根据正在进行的计算,有时无法以这种方式检查进度。我们的想法是能够离开计算机,在给定时间后返回并检查您想要查看的任何值。为此我们可以使用pthreads。以下代码有效,我发布它的唯一原因是因为我不确定我是否正确使用线程,主要是如何关闭它。首先让我们考虑文件“reporter.h”:#include#

c++ - 从 C++ 中的文件中读取多线程?

我的应用程序使用文本文件将数据存储到文件中。我正在测试通过多线程操作来读取它的最快方法。我使用了以下两种技术:使用与NUMBER_OF_PROCESSORS环境变量一样多的流。每个流都在不同的线程上。将文件中的总行数平均分配给每个流。解析文本。只有一个流解析整个文件并将数据加载到内存中。创建线程(=NUM​​BER_OF_PROCESSORS-1)以解析内存中的数据。测试是在100kB-800MB的各种文件大小上运行的。文件中的数据:100.23123-42343.342555...(andsoon)4928340-93240.2349......数据存储在double的二维数组中。结

c++ - boost 线程和 try_join_for 每次都给出不同的输出

假设我有以下代码:#include#include#includeintmain(){boost::threadthd([]{std::cout每次启动该程序时,MSVC-12.0和boost1.55都会给我不同的输出。例如,strFinishedstrFinishedstrRunning当我将boost::chrono::nanoseconds更改为boost::chrono::microseconds时,输出看起来符合预期。为什么?我究竟做错了什么?这是boost库中的错误吗?是否有关于boost错误跟踪器的票证?提前致谢。 最佳答案

C++11 main() 返回时终止线程?

我听说“现代操作系统会在关闭进程时清除进程创建的所有线程”,但是当我返回main()时,我遇到了这些错误:1)ThisapplicationhasrequestedtheRuntimetoterminateitinanunusualway.Pleasecontacttheapplication'ssupportteamformoreinformation.2)terminatecalledwithoutanactiveexception我的实现看起来像这样(例如,我现在写的是对糟糕的实现感到抱歉):voidprocess(intid){while(true){std::this_thr

多线程的利器:CompletableFuture 你还可以这样使用多线程

CompletableFuture是java8开始提供的API,解决了在多线程场景下繁琐的代码逻辑,日常开发中,我们都会用到线程池,一般会用execute()和submit()方法提交任务。但是当你用过CompletableFuture之后,就会发现以前的线程池处理任务有多难用,功能有多简陋,CompletableFuture又是多么简洁优雅。要知道CompletableFuture已经随着Java8发布7年了,使用CompletableFuture更便利使用多线程。1.使用线程池处理任务@TestpublicvoidTest27(){//1.创建线程池ExecutorServiceexecu

c++ - 我是否需要为线程之间的更改通知标志设置内存屏障?

我需要一个非常快速的(在“读者的低成本”的意义上,而不是“低延迟”)线程之间的更改通知机制,以便更新读取缓存:情况ThreadW(Writer)仅偶尔更新数据结构(S)(在我的例子中是map中的设置)。ThreadR(Reader)维护着S的缓存并且非常频繁地读取它。当线程W更新S时,线程R需要在合理的时间内(10-100ms)收到更新通知。架构为ARM、x86和x86_64。我需要使用gcc4.6及更高版本支持C++03。代码是这样的://variablessharedbetweenthreadsboolupdateAvailable;SomeMutexdataMutex;std::

c++ - pre-main 全局初始化程序是否保证运行单线程?

例如,以下代码段中的node::node()构造函数访问全局变量node::count和::tail没有任何多线程保护。C++标准是否保证输出始终是012的排列(无论顺序如何)?#includestructnode*tail;structnode{staticintcount;intindex;node*prev;node(){index=count++;prev=tail;tail=this;}};intnode::count;nodeone,two[2];intmain(intargc,char*argv[]){for(node*p=tail;p;p=p->prev)printf(

c++ - 多线程环境中的析构函数?

我想知道在这样的类(class)中会发生什么:classMyClass{private:std::vectoriVector;voidWorker(){//LotsofstuffdonewithiVector//adding,removingelements,etc.}}假设我创建了一个使用iVector并修改它的线程(由类成员函数之一调用)。除了这个worker之外,该类的其他成员函数都没有读取或修改这个std::vector。一切似乎都很好,因为工作线程是唯一使用iVector的线程。但是当对象的一个​​实例被销毁时会发生什么?即使对象在工作线程完成后被销毁,iVector的析构函

【Linux】线程池的简易实现(懒汉模式)

文章目录前言一、懒汉方式1.普通模式1.线程安全模式二、源代码1.Task.hpp(要执行的任务)2.ThreadPool.hpp(线程池)3.Main.cpp前言`线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。线程池的应用场景:需要大量的线程来完成任务,且完成任务的时间比较短。WEB服务器完成网页请求这样的任务,使

我们聊聊单核可以实现多线程吗?

首先答案是“可以”,接下来就说说为啥可以。解释此问题可以从两个方面思考,一个是计算机如此复杂和强大的根本原因是什么?一个是硬件与软件的依赖关系是怎样的?明确了这两个问题的答案后,再回头看本问题,就会发现单核能够实现多线程是多么理所当然的事。一、计算机如此复杂和强大的原因了解过计算机和操作系统历史的人应该很快就能发现,计算机之所以会变得如此复杂和强大完全是“单核多任务”的实现与不断扩展导致的。计算机就是因为要实现“单核多任务”而变得复杂的,同时也是因为实现了“单核多任务”变得强大,然后在对“单核多任务”的不断扩展中变得更加强大。比如操作系统在最开始就只是个简单的“批处理系统”,本质就是个多任务管